package com.codemeta.bokit.web.core.filter;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * Web 过滤器顺序的枚举类，保证过滤器按照符合我们的预期
 * <p>
 * 考虑到每个 starter 都需要用到该工具类，所以放到 common 模块下的 util 包下
 *
 * @author 筠熙科技
 */
@Getter
@AllArgsConstructor
public enum WebFilterOrder {

    /**
     * 跨越过滤器
     */
    CORS_FILTER(Integer.MIN_VALUE),
    TRACE_FILTER(CORS_FILTER.value + 1),
    REQUEST_BODY_CACHE_FILTER(Integer.MIN_VALUE + 500),
    // OrderedRequestContextFilter 默认为 -105，用于国际化上下文等等
    /**
     * 需要保证在 RequestBodyCacheFilter 后面
     */
    API_ACCESS_LOG_FILTER(-104),
    /**
     * 需要保证在 RequestBodyCacheFilter 后面
     */
    XSS_FILTER(-103),
    /**
     * Spring Security Filter 默认为 -100，可见 SecurityProperties 配置属性类
     */
    DEMO_FILTER(Integer.MAX_VALUE),
    ;
    private final int value;
}